<?php
namespace CHOMP\SGIBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Hautelook\AliceBundle\Alice\DataFixtureLoader;
use Nelmio\Alice\Fixtures;
use Doctrine\ORM\EntityRepository;
use CHOMP\SGIBundle\Entity\Rol;
use CHOMP\SGIBundle\Entity\Usuario;
use CHOMP\SGIBundle\Entity\Permiso;
use CHOMP\SGIBundle\Entity\Prioridad;
use CHOMP\SGIBundle\Entity\PermisoAutorizacion;
use CHOMP\SGIBundle\Entity\Empresa;
use Pagerfanta\Adapter\DoctrineORMAdapter;
use CHOMP\SGIBundle\Services\RolHelper;
use JMS\DiExtraBundle\Annotation as DI;
use Symfony\Component\HttpFoundation\Session\Session;


class DataLoaderController extends Controller
{

	/**
	 * 
	 * @var RolHelper
	 * @DI\Inject("rol.helper")
	 */
	
	public $rolHelper;

    public function loadAction()
    {
		$objectManager = $this->getDoctrine()->getManager();
	    $objects = \Nelmio\Alice\Fixtures::load(__DIR__.'/yml/datos3.yml', $objectManager, array('locale' => 'es_AR'));
	    //$this->addPermisosToRolesAction();
	    return new Response('Created');
    }

    public function load_devAction()
    {
		/*
		$objectManager = $this->getDoctrine()->getManager();
		$objects = \Nelmio\Alice\Fixtures::load(__DIR__.'/yml/datos_dev.yml', $objectManager, array('locale' => 'es_AR',  'providers' => array($this)));
	    $this->addPrioridadAction();
	    $this->crearPermisosEdicionAction();
	    $this->crearPermisoCREAR_INCIDENTEAction();
	    $this->crearPermisoCREAR_EmpresaAction();
		$this->crearPermisoBORRAR_EmpresaAction();
		$this->addPermisosToRolesAction();
		$this->addPermisosToRolesGeneric();
		*/
		return new Response('Cambie todo, usar /load_prod mientras arreglo esto para agregar data de prueba. Estan solo nuestros usuarios y nuestras empresas, somos todos administrador root. Probar cargar data a mano y cambiarnos los roles desde la app.');
    }

    public function addPermisosToRolesGeneric(){
		$em = $this->getDoctrine()->getManager();
        $roles = $em->getRepository('CHOMPSGIBundle:Rol')->createQueryBuilder('r')->getQuery()->getResult();
		foreach( $roles as $rol){ 
			if ($rol->getNombre() == 'fAdministrador'){
				$rol->addPermisos( $this->rolHelper->insertPermisosForAdministrador($rol->getEmpresa()->getId()) );
				$em->persist($rol);
			}else{
				if ($rol->getNombre() == 'fOperador'){
					$rol->addPermisos( $this->rolHelper->insertPermisosForOperador($rol->getEmpresa()->getId()) );
					$em->persist($rol);
				}else{
					if ($rol->getNombre() == 'fCoordinador'){
						$rol->addPermisos( $this->rolHelper->insertPermisosForCoordinador($rol->getEmpresa()->getId()) );
						$em->persist($rol);
					}else{
						if ($rol->getNombre() == 'fClienteExterno'){
							$rol->addPermisos( $this->rolHelper->insertPermisosForClienteExterno($rol->getEmpresa()->getId()) );
							$em->persist($rol);
						}
					}
				}
			}
		}
		$em->flush();

    }

   public function addPrioridadAction(){

		$em = $this->getDoctrine()->getManager();
		//traigo roles todos
		$empresas = $em->getRepository('CHOMPSGIBundle:Empresa')->createQueryBuilder('r')->getQuery()->getResult();;
		$i = 1;
		foreach( $empresas as $empresa) {
			$i++;
			$prioridad1=new Prioridad($i, 'Severa', '' , 8, $empresa);
			$prioridad2=new Prioridad($i, 'Alta', '', 16, $empresa);
			$prioridad3=new Prioridad($i, 'Media', '', 24, $empresa);
			$prioridad4=new Prioridad($i, 'Baja', '', 32, $empresa);
			$em->persist($prioridad1);
			$em->persist($prioridad2);
			$em->persist($prioridad3);
			$em->persist($prioridad4);
		}
		$em->flush();
   }


   public function crearPermisosEdicionAction() {

        $em = $this->getDoctrine()->getManager();
	
        //traigo roles todos
        $permisoEdicion = $em->getRepository('CHOMPSGIBundle:Permiso')->createQueryBuilder('r')->getQuery()->getResult();
		
        $autorizaciones = $em->getRepository('CHOMPSGIBundle:Autorizacion')->createQueryBuilder('a')->getQuery()->getResult();

		foreach( $permisoEdicion as $p){ 
			if ($p->getDescripcion() == 'Editar'){
				$permisoedicion=$p;
			}
		}

        foreach( $autorizaciones as $autorizacion) {
			$permaut= new PermisoAutorizacion($permisoedicion, $autorizacion);
			//$permaut->setPermiso($permisoedicion);
			//$permaut->setAutorizacion($autorizacion);
			$em->persist($permaut);
        }
        $em->flush();
   }

   /**
    * Inserta permiso CREAR_INCIDENTE_ALL en la posicion final (41)
    */
	public function crearPermisoCREAR_INCIDENTEAction(){
		$em = $this->getDoctrine()->getManager();
	
        //traigo roles todos
        $permisoEdicion = $em->getRepository('CHOMPSGIBundle:Permiso')->createQueryBuilder('r')->getQuery()->getResult();
		foreach( $permisoEdicion as $p){ 
			if ($p->getDescripcion() == 'Crear'){
				$permiso_crear = $p;
			}
		}

		$query2 = $em->createQuery('SELECT a FROM CHOMPSGIBundle:Autorizacion a WHERE a.objeto =:obj and a.campo = :campo') 
		->setParameter(':obj','Incidente')
		->setParameter(':campo','ALL'); //Incidente ALL
		
		$autorizacion = $query2->getResult();

		$permaut= new PermisoAutorizacion($permiso_crear, $autorizacion[0]);
		//$permaut->setPermiso($permiso_crear);
		//$permaut->setAutorizacion($autorizacion[0]);
		$em->persist($permaut);
		$em->flush();
	}


   /**
    * Inserta permiso CREAR_Empresa_ALL en la posicion final (42)
    */
        public function crearPermisoCREAR_EmpresaAction(){
            $em = $this->getDoctrine()->getManager();

        	$permisoEdicion = $em->getRepository('CHOMPSGIBundle:Permiso')->createQueryBuilder('r')->getQuery()->getResult();
            foreach( $permisoEdicion as $p){
                    if ($p->getDescripcion() == 'Crear'){
                            $permiso_crear = $p;
                    }
            }

            $query2 = $em->createQuery('SELECT a FROM CHOMPSGIBundle:Autorizacion a WHERE a.objeto =:obj and a.campo = :campo')
            ->setParameter(':obj','Empresa')
            ->setParameter(':campo','ALL'); //Incidente ALL

            $autorizacion = $query2->getResult();

            $permaut= new PermisoAutorizacion($permiso_crear, $autorizacion[0]);
            //$permaut->setPermiso($permiso_crear);
            //$permaut->setAutorizacion($autorizacion[0]);
            $em->persist($permaut);
            $em->flush();
        }


   /**
    * Inserta permiso Borrar_Empresa en la posicion (43)
    */
    public function crearPermisoBORRAR_EmpresaAction(){
		$em = $this->getDoctrine()->getManager();

	    $permisoEdicion = $em->getRepository('CHOMPSGIBundle:Permiso')->createQueryBuilder('r')->getQuery()->getResult();
        foreach( $permisoEdicion as $p){
            if ($p->getDescripcion() == 'Borrar'){
                    $permiso_crear = $p;
            }
        }

        $query2 = $em->createQuery('SELECT a FROM CHOMPSGIBundle:Autorizacion a WHERE a.objeto =:obj and a.campo = :campo')
        ->setParameter(':obj','Empresa')
        ->setParameter(':campo','ALL'); //Incidente ALL

        $autorizacion = $query2->getResult();

        $permaut= new PermisoAutorizacion($permiso_crear, $autorizacion[0]);
        //$permaut->setPermiso($permiso_crear);
        //$permaut->setAutorizacion($autorizacion[0]);
        $em->persist($permaut);
        $em->flush();
    }

    public function addPermisosToRolesAction(){
    	//Como no pude crear relacion "many to many" en el yml, asigno los permisos a mano
	    $em = $this->getDoctrine()->getManager();
        //traigo roles todos
		$query1 = $em->getRepository('CHOMPSGIBundle:Rol')->createQueryBuilder('r')->getQuery();
        //traigo permiso-autorizacion todas
 
		$query2 = $em->createQuery('SELECT pa , p , a FROM CHOMPSGIBundle:PermisoAutorizacion pa JOIN pa.permiso p JOIN pa.autorizacion a ORDER BY pa.id ASC');

        //query
        $roles = $query1 -> getResult();
        $permAuts = $query2 -> getResult();
 

 		//Asignar permisos 
		foreach( $roles as $rol ) {
			$this->addPermisosToRol($rol , $permAuts);	
		}
    }

    public function addPermisosToRol($rol , $permAuts){
		$em = $this->getDoctrine()->getManager();
        if ( $rol->getNombre() == 'Administrador Root'){
			 // 21 al 29 Editar (Empresa, Incidente, Reportes,Timesheer, 
			// CuentaAnalitica, Usuario, Prioridad, Configuracion, Seguridad
        	for ($i = 20; $i <= 28; $i++ ){
				$rol->addPermiso($permAuts[$i]);
			}
			$rol->addPermiso($permAuts[37]); // Editar WorkFlow
			$rol->addPermiso($permAuts[38]); // Editar GrupoSoporte
			$rol->addPermiso($permAuts[39]); // Editar Estado
			$rol->addPermiso($permAuts[40]); // Crear Incidente
			$rol->addPermiso($permAuts[41]); // Crear Empresa
			$rol->addPermiso($permAuts[42]); // Borrar Empresa
		}else
			if ( $rol->getNombre() == 'Administrador'){
     	       	for ($i = 20; $i <= 28; $i++ ){
					$rol->addPermiso($permAuts[$i]);
            	}               
        		$rol->addPermiso($permAuts[37]); // Editar WorkFlow
    			$rol->addPermiso($permAuts[38]); // Editar GrupoSoporte
				$rol->addPermiso($permAuts[39]); // Editar Estado
				$rol->addPermiso($permAuts[40]); // Crear Incidente
	        }else
				if ( $rol->getNombre() == 'Operador'){
					$rol->addPermiso($permAuts[1]); // Ver Incidente ALL
					$rol->addPermiso($permAuts[23]); // Editar TimeSheet ALL
					$rol->addPermiso($permAuts[29]); // Editar Incidente comentarios
					$rol->addPermiso($permAuts[30]); // Editar Incidente prioridad
					$rol->addPermiso($permAuts[31]); // Editar Incidente GrupoSop
	                $rol->addPermiso($permAuts[35]); // Editar Incidente EstadoNoCerrado
	                $rol->addPermiso($permAuts[36]); // Editar Incidente ResponsableCliente
				}else
					if ( $rol->getNombre() == 'Cliente Externo'){
	                    $rol->addPermiso($permAuts[1]);  // Ver Incidente ALL
	                    $rol->addPermiso($permAuts[29]); // Editar Incidente comentarios 
	                    $rol->addPermiso($permAuts[30]); // Editar Incidente prioridad
	                    $rol->addPermiso($permAuts[40]); // Crear Incidente
					}else
	                    if ( $rol->getNombre() == 'Coordinador'){
	                    	$rol->addPermiso($permAuts[0]);  // Ver Empresa
	                        $rol->addPermiso($permAuts[4]);  // Ver Cuenta Analitica
	                        $rol->addPermiso($permAuts[5]);  // Ver Usuario
	                        $rol->addPermiso($permAuts[6]);  // Ver Prioridad
	                        $rol->addPermiso($permAuts[18]); // Ver GrupoSoporte ALL
	                        $rol->addPermiso($permAuts[21]); // Editar Incidente ALL 
	                        $rol->addPermiso($permAuts[23]); // Editar TimeSheet ALL
							$rol->addPermiso($permAuts[40]); // Crear Incidente
						}
        	$em->persist($rol);
		$em->flush(); 
    }


} 
	
	



